package ProjectoX;

import java.awt.Rectangle;
import java.awt.event.KeyEvent;

public class Mario extends Personaje{
	
	protected static final int PLAYER_SPEED = 5;
	private boolean enTierra;
	private boolean continuarSaltando, salto;
	private int posBase;
	private boolean left, right;
	protected String [] NombresSpriteMov;
	protected String [] NombresSpriteMovIz;
	final protected int AltoM = 43;
	final protected int AnchoM = 43;
	final protected int AltoC = 50;
	final protected int AnchoC = 50;
	
	
	public Mario(Nivel nivel) {
		super(nivel);
		NombresSpriteMov = new String [] {"Mario/mario1.png", "Mario/mario2.png", "Mario/mario3.png", "Mario/mario4.png", 
										  "Mario/mario5.png", "Mario/mario6.png", "Mario/mario7.png", "Mario/mario8.png", };
		NombresSpriteMovIz = new String [] {"Mario/mario1_iz.png", "Mario/mario2_iz.png", "Mario/mario3_iz.png", "Mario/mario4_iz.png", 
											"Mario/mario5_iz.png", "Mario/mario6_iz.png", "Mario/mario7_iz.png", "Mario/mario8_iz.png", };
		enTierra = true;
		salto = false;
		continuarSaltando = false;
		GetMov().setMovHorizontal(0);
		GetMov().setMovVertical(PLAYER_SPEED);
		Pos = new Posicion(319, 0, AnchoM, AltoM);
		posBase = Pos.getY();
		setSpriteName(new String [] {"Mario/mario.png"});
		setFrameSpeed(10);
	}
	
	public void colision (Componente C) {
		Rectangle r1 = C.getBounds();
		Rectangle Area = r1.intersection(this.getBounds());
		System.out.println(Area.getHeight());
		System.out.println("ANOCHOE "+Area.getWidth());
		if ((Area.getHeight()<=8)) {
			if ((Area.getWidth()>8)) {
			if (Area.getY()<C.getPos().getY()+30){
				if (Mov.getVelY()>0)
					detenerSalto(C);
				}
			else invertirSalto();
		}}
		else {
			if (Area.getX()<C.getPos().getX()+30){
				Pos.setX(C.getPos().getX()-AnchoM);
			}				
			else {
				Pos.setX(C.getPos().getX()+AnchoC+1);
			}				
		}
	}
	
	public void teclaPresionada(KeyEvent e) {
		switch (e.getKeyCode()) {
			case	KeyEvent.VK_UP : if (enTierra) {
										GetMov().setMovVertical(-PLAYER_SPEED);
									 	posBase = Pos.getY();
									 	enTierra = false;
									 	salto = true;
									 	continuarSaltando = true;
									 	miNivel.getSoundCache().playSound("Sonidos/smw_jump.wav");
								 	 }
									 break;
			case	KeyEvent.VK_LEFT : left = true;
									   setSpriteName(NombresSpriteMovIz);
									   break;
			case	KeyEvent.VK_RIGHT : right = true;
										setSpriteName(NombresSpriteMov);
										break;
		}
		updateSpeed();
	}
	
	public void teclaSoltada(KeyEvent e) {
			
		switch (e.getKeyCode()) {
		
			case	KeyEvent.VK_UP : continuarSaltando = false; 
								     break;
			case	KeyEvent.VK_LEFT : left = false;
									   if (!right) setSpriteName(new String [] {"Mario/mario7_iz.png"});
									   break;
			case	KeyEvent.VK_RIGHT : right = false;
										if (!left) setSpriteName(new String [] {"Mario/mario7.png"});
			break;
		}
		updateSpeed();
	}
	
	private void updateSpeed() {
		GetMov().setMovHorizontal(0);
	  	if (right) GetMov().setMovHorizontal(PLAYER_SPEED);
	  	if (left) GetMov().setMovHorizontal(-PLAYER_SPEED);
	  }
	
	public void actuar() {
		super.actuar();
		Pos.setX(Pos.getX()+GetMov().getVelX());
		Pos.setY(Pos.getY()+GetMov().getVelY());
		System.out.println("YYYY "+Pos.getX());
		if (enTierra)
			GetMov().setMovVertical(PLAYER_SPEED);
		enTierra = false;
		if (Pos.getX() < 0)
			Pos.setX(0);
		if (Pos.getX() > 4700)
			miNivel.gameWiner();
		if (Pos.getY()>800) {
			miNivel.gameOver();
		}
		if (salto)
			if (continuarSaltando){
			if ((Pos.getY()<(posBase-(AltoM*5))))
				invertirSalto();
		}
			else if (Pos.getY()<(posBase-AltoC))
				invertirSalto();
	}
	

	private void invertirSalto() {
		GetMov().setMovVertical(PLAYER_SPEED);	
	}
	
	private void detenerSalto(Componente C) {
		Pos.setY(C.getPos().getY()-AltoM+1);
		enTierra= true;
		GetMov().setMovVertical(0);
		salto = false;
	}
}
